import type { IComponent } from './interface/common';
/* eslint-disable no-duplicate-imports */
/**
 * @description export all component modules
 */
import type { IScrollBarSpec, IScrollBarTheme } from './data-zoom/scroll-bar';
import { ScrollBar, registerScrollBar } from './data-zoom/scroll-bar/scroll-bar';
import type { IDataZoomSpec, IDataZoomTheme } from './data-zoom/data-zoom';
import { DataZoom, registerDataZoom } from './data-zoom/data-zoom/data-zoom';
import { CustomMark, registerCustomMark } from './custom-mark/custom-mark';
import type { IBrushSpec, IBrushTheme } from './brush';
import { Brush, registerBrush } from './brush/brush';
import type {
  ICartesianLinearAxisSpec,
  ICartesianBandAxisSpec,
  ICartesianTimeAxisSpec,
  ICartesianAxisSpec,
  ICartesianLogAxisSpec,
  ICartesianAxisCommonTheme,
  ICartesianSymlogAxisSpec
} from './axis/cartesian/index';
import {
  CartesianAxis,
  CartesianLinearAxis,
  CartesianBandAxis,
  CartesianTimeAxis,
  CartesianLogAxis,
  CartesianSymlogAxis,
  registerCartesianBandAxis,
  registerCartesianLinearAxis,
  registerCartesianLogAxis,
  registerCartesianSymlogAxis,
  registerCartesianTimeAxis
} from './axis/cartesian/index';
import type { IPolarAxisCommonTheme, IPolarAxisSpec, IPolarBandAxisSpec, IPolarLinearAxisSpec } from './axis/polar';
import {
  PolarAxis,
  PolarBandAxis,
  PolarLinearAxis,
  registerPolarBandAxis,
  registerPolarLinearAxis
} from './axis/polar';
import type { IDiscreteLegendSpec, IDiscreteLegendTheme } from './legend/discrete';
import { DiscreteLegend, registerDiscreteLegend } from './legend/discrete';
import type {
  IColorLegendTheme,
  IContinuousLegendSpec,
  IContinuousLegendTheme,
  ISizeLegendTheme
} from './legend/continuous';
import { ContinuousLegend, registerContinuousLegend } from './legend/continuous';
import type { IIndicatorSpec, IIndicatorTheme } from './indicator';
import { Indicator, registerIndicator } from './indicator';
import type { ITitleSpec, ITitleTheme } from './title';
import { Title, registerTitle } from './title';
import type { IGeoCoordinateSpec } from './geo';
import { GeoCoordinate, registerGeoCoordinate } from './geo';
import type { ICartesianCrosshairSpec, ICrosshairTheme, IPolarCrosshairSpec } from './crosshair';
import { CartesianCrossHair, PolarCrossHair, registerCartesianCrossHair, registerPolarCrossHair } from './crosshair';
import type { IPlayerSpec, IPlayerTheme } from './player';
import { Player, registerPlayer } from './player';
import type { IMarkLineSpec, IStepMarkLineSpec, IMarkLineTheme } from './marker/mark-line';
import { CartesianMarkLine, PolarMarkLine, registerMarkLine, registerPolarMarkLine } from './marker/mark-line';
import type { IMarkAreaSpec, IMarkAreaTheme } from './marker/mark-area';
import { CartesianMarkArea, PolarMarkArea, registerMarkArea, registerPolarMarkArea } from './marker/mark-area';
import type { IMarkPointSpec, IMarkPointTheme } from './marker/mark-point';
import {
  CartesianMarkPoint,
  PolarMarkPoint,
  GeoMarkPoint,
  registerMarkPoint,
  registerPolarMarkPoint,
  registerGeoMarkPoint
} from './marker/mark-point';
import type { ITooltipSpec, ITooltipTheme } from './tooltip';
import { Tooltip, registerTooltip } from './tooltip';
import type { ILabelSpec, ITotalLabelTheme, ITotalLabelSpec } from './label';
import { Label, registerLabel } from './label';
import { TotalLabel, registerTotalLabel } from './label/total-label';
import { registerPoptip } from './poptip/index';
import type { IComponentTheme } from './interface';
import type { IAxis, IAxisCommonTheme, IAxisItemTheme, IBandAxisTheme } from './axis/interface';
import type { IPoptipTheme } from './poptip/interface';
import { registerDimensionTooltipProcessor } from './tooltip/processor/dimension-tooltip';
import { registerMarkTooltipProcessor } from './tooltip/processor/mark-tooltip';
import { getCartesianCrosshairRect } from './crosshair/utils/cartesian';
import { registerGroupTooltipProcessor } from './tooltip/processor/group-tooltip';
import { BandAxisMixin } from './axis/mixin/band-axis-mixin';
import { LinearAxisMixin } from './axis/mixin/linear-axis-mixin';

export {
  ScrollBar,
  DataZoom,
  CustomMark,
  Brush,
  BandAxisMixin,
  LinearAxisMixin,
  CartesianAxis,
  CartesianBandAxis,
  CartesianLinearAxis,
  CartesianTimeAxis,
  CartesianLogAxis,
  CartesianSymlogAxis,
  PolarAxis,
  PolarBandAxis,
  PolarLinearAxis,
  DiscreteLegend,
  ContinuousLegend,
  Indicator,
  Title,
  GeoCoordinate,
  CartesianCrossHair,
  PolarCrossHair,
  Player,
  CartesianMarkLine,
  CartesianMarkArea,
  CartesianMarkPoint,
  PolarMarkLine,
  PolarMarkArea,
  PolarMarkPoint,
  GeoMarkPoint,
  Tooltip,
  Label,
  TotalLabel
};

export { getCartesianCrosshairRect };

export {
  registerBrush,
  registerScrollBar,
  registerTitle,
  registerMarkTooltipProcessor,
  registerDimensionTooltipProcessor,
  registerGroupTooltipProcessor,
  registerTooltip,
  registerCartesianBandAxis,
  registerCartesianCrossHair,
  registerCartesianLinearAxis,
  registerCartesianLogAxis,
  registerCartesianSymlogAxis,
  registerCartesianTimeAxis,
  registerContinuousLegend,
  registerCustomMark,
  registerDataZoom,
  registerDiscreteLegend,
  registerGeoCoordinate,
  registerIndicator,
  registerLabel,
  registerTotalLabel,
  registerMarkLine,
  registerMarkArea,
  registerMarkPoint,
  registerPolarMarkLine,
  registerPolarMarkArea,
  registerPolarMarkPoint,
  registerGeoMarkPoint,
  registerPlayer,
  registerPolarBandAxis,
  registerPolarCrossHair,
  registerPolarLinearAxis,
  registerPoptip
};

export type {
  IAxis,
  IComponent,
  IScrollBarSpec,
  IBrushSpec,
  ICartesianAxisSpec,
  ICartesianBandAxisSpec,
  ICartesianCrosshairSpec,
  ICartesianLinearAxisSpec,
  ICartesianTimeAxisSpec,
  ICartesianLogAxisSpec,
  ICartesianSymlogAxisSpec,
  IContinuousLegendSpec,
  IDataZoomSpec,
  IDiscreteLegendSpec,
  IGeoCoordinateSpec,
  IIndicatorSpec,
  ILabelSpec,
  ITotalLabelSpec,
  IMarkAreaSpec,
  IMarkLineSpec,
  IStepMarkLineSpec,
  IMarkPointSpec,
  IPlayerSpec,
  IPolarAxisSpec,
  IPolarBandAxisSpec,
  IPolarCrosshairSpec,
  IPolarLinearAxisSpec,
  ITitleSpec,
  ITooltipSpec
};

export type {
  IComponentTheme,
  ICrosshairTheme,
  IAxisItemTheme,
  IAxisCommonTheme,
  IBandAxisTheme,
  IPolarAxisCommonTheme,
  ICartesianAxisCommonTheme,
  IBrushTheme,
  IDataZoomTheme,
  IScrollBarTheme,
  IIndicatorTheme,
  ITotalLabelTheme,
  ISizeLegendTheme,
  IColorLegendTheme,
  IDiscreteLegendTheme,
  IContinuousLegendTheme,
  IMarkAreaTheme,
  IMarkLineTheme,
  IMarkPointTheme,
  IPlayerTheme,
  IPoptipTheme,
  ITitleTheme,
  ITooltipTheme
};

// tooltip
export * from './tooltip/interface';

// utils

export { isXAxis, isYAxis, isZAxis } from './axis/cartesian/util';
